package gov.pbc.nn.kjgl.software.view;

import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.ExceptionHandler;

import com.bstek.dorado.annotation.DataProvider;
import com.bstek.dorado.annotation.DataResolver;
import com.bstek.dorado.annotation.Expose;
import com.bstek.uflo.client.service.ProcessClient;
import com.bstek.uflo.client.service.TaskClient;
import com.bstek.uflo.model.ProcessInstance;

import gov.pbc.nn.kjgl.entity.ProjectChange;
import gov.pbc.nn.kjgl.software.dao.ProjectChangeReTJDao;

@Component
public class ChangeProjectTJPR {

	@Autowired
	@Qualifier(ProcessClient.BEAN_ID)
	private ProcessClient processClient;

	@Autowired
	@Qualifier(TaskClient.BEAN_ID)
	private TaskClient taskClient;

	@Autowired
	private ProjectChangeReTJDao pcDao;

	@DataProvider
	public Map<String, Object> loadProjectByChange(String id) {
		return pcDao.loadProjectByChange(id);
	}

	@Expose
	public void saveOne(Map<String, Object> parameter) {
		String id = (String) parameter.get("id");
		ProjectChange pc = pcDao.getProjectChange(id);
		String changeDescribe = (String) parameter.get("changeDescribe");
		String changeName = (String) parameter.get("changeName");
		pc.setChangeDescribe(changeDescribe);
		pc.setChangeName(changeName);
		pcDao.update(pc);
	}

	/**
	 * 得到流程变量
	 * 
	 * @param processInstanceId
	 * @return
	 */
	@Expose
	public int getState(String processInstanceId) {
		if (processInstanceId != "") {
			ProcessInstance process = processClient.getProcessInstanceById(Long.valueOf(processInstanceId));
			String processVariable = processClient.getProcessVariable("state", process).toString();
			// 申请人 给 科技部门 流程变量为=1
			// 申请人 给 业务部门 流程变量为=2
			// 业务部门审核不同意给申请人 流程变量=4。
			// 科技处处长审核通过。流程变量=8
			// 科技处处长不审核通过。流程变量=14
			// 业务干系科长审核通过。流程变量=16
			// 业务干系科长审核不通过。流程变量=21
			// 业务干系行领导审核通过。流程变量=24
			// 业务干系行领导审核不通过。流程变量=28
			if(processVariable.equals("4")){//申请再次提交的页面使用
				return 4;
			}else if(processVariable.equals("14")){//申请再次提交的页面使用
				return 14;
			}else if(processVariable.equals("21")){//科技处审核页面使用
//				 读取数据时候：返回的如果为21 则说明 是业务干系科长 审核不通过，隐藏“不同意”按钮
				return 21;
			}else if(processVariable.equals("28")){
				//业务干系科长审核使用
//				 读取数据时候：返回的如果为28 则说明 是业务干系行领导 审核不通过，隐藏“不同意”按钮
				return 28;
			}
		}
		return 0;
	}


	/**
	 * 再次申请
	 * 
	 * @param taskId
	 * @param state
	 */
	@Expose
	public void ajaxRe(String taskId, String state) {
		taskClient.start(Long.valueOf(taskId));
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("state", state);
		taskClient.complete(Long.valueOf(taskId), map);
	}

	/**
	 * 撤销申请
	 * 
	 * @param taskId
	 * @param project
	 */
	@Transactional
	@Expose
	public void cheXiao(String taskId, String id) {
		// PROJECT state设置为20,表示撤销流程
		ProjectChange pc = pcDao.getProjectChange(id);
		pc.setState(20);
		this.pcDao.update(pc);
		taskClient.start(Long.valueOf(taskId));
		taskClient.forward(Long.valueOf(taskId), "结束");
	}

}
